package com.yunpeng.aidevice.biz.service;

import com.yunpeng.common.dto.Result;
import com.yunpeng.common.paging.PagingQueryDTO;
import com.yunpeng.aidevice.common.vo.PermissionDetailVO;

import java.util.Date;

/**
 * IPermissionBizService
 *
 * @author : Moore(hemw)
 * @date : 2020-04-15
 */
public interface IPermissionBizService {
    /**
     * 新增权限项
     *
     * @param name         权限项名称
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> addNew(String name, String operatorCode);

    /**
     * 删除权限项
     *
     * @param permissionCode 权限项代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> remove(String permissionCode, String operatorCode);

    /**
     * 禁用权限
     *
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> disabled(String permissionCode, String operatorCode);

    /**
     * 启用权限
     *
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> enabled(String permissionCode, String operatorCode);

    /**
     * 权限服务端列表分页查询
     *
     * @param name        名称（左匹配）
     * @param pageSize    （页数据数量，1-100，默认10）
     * @param currentPage （当前页码，默认1）
     * @return
     */
    Result<PagingQueryDTO> queryList(String name, Integer pageSize, Integer currentPage);

    /**
     * 权限详情数据
     *
     * @param permissionCode 权限代码
     * @return
     */
    Result<PermissionDetailVO> permissionDetail(String permissionCode);

    /**
     * 绑定权限到用户
     *
     * @param userCode       用户代码
     * @param permissionCode 权限代码
     * @param startDate      起始生效时间
     * @param endDate        生效截止时间
     * @param operatorCode   操作人代码
     * @param merchantCode   商户代码
     * @return
     */
    Result<Void> userBindPermissions(String userCode, String permissionCode, Date startDate, Date endDate, String operatorCode, String merchantCode);

    /**
     * 用户权限解绑
     *
     * @param userCode       用户代码
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> unbindUserPermissions(String userCode, String permissionCode, String operatorCode);

    /**
     * 组织机构权限分页列表
     *
     * @param organizationName 组织机构名（左匹配）
     * @param permissionName   权限名（左匹配）
     * @param pageSize         （页数据数量，1-100，默认10）
     * @param currentPage      （当前页码，默认1）
     * @return
     */
    Result<PagingQueryDTO> queryOrgPermissionList(String organizationName, String permissionName, Integer pageSize, Integer currentPage);

    /**
     * 绑定权限到组织机构
     *
     * @param orgCode        组织机构代码
     * @param permissionCode 权限代码
     * @param startTime      起始生效时间
     * @param endTime        生效截止时间
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> bindPermissionToOrg(String orgCode, String permissionCode, Date startTime, Date endTime, String operatorCode);

    /**
     * 解除组织机构的权限绑定
     *
     * @param orgCode        组织机构代码
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> unbindPermissionFromOrg(String orgCode, String permissionCode, String operatorCode);
}
